<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>组件注册</title>
</head>
<body>

<!--
  全局组件注册语法
  Vue.component('组件名', {
    data: 组件数据(data是一个函数)
    template: 组件模板内容
  })

  data必须是一个函数
  组件模板内容必须是单个根元素
  组件模板内容可以是模板字符串

  组件命名可以是短横线，也可以是驼峰式,驼峰式在使用组件时必须是短横杠形式

  如果使用驼峰式命名组件，那么在使用组件的时候，只能在模板字符串模板中使用驼峰式的方式。
  在普通的标签模板中，必须使用短横线的方式使用。
-->

<div id="app">
  <!-- 驼峰式的方式用在这里会报错 -->
  <!--<helloWorld></helloWorld>-->

  <hello-world></hello-world>
  <button-counter></button-counter>
</div>

<script src="../lib/vue.js"></script>
<script>

  Vue.component('helloWorld', {
    data() {
      return {
        msg: 'Hello World'
      }
    },
    template: `
      <div>{{msg}}</div>
    `
  })

  Vue.component('button-counter', {
    // 使用函数会形成一个闭包，以保证每个组件实例有一份独立的数据
    data: function () {
      return {
        count: 0
      }
    },
    template: `
      <div>
        <hello-world></hello-world>
        <button @click="add">点击了 {{count}} 次</button>
      </div>
    `,
    methods: {
      add() {
        this.count++
      }
    }
  })


  let vm = new Vue({
    el: '#app',
  })
</script>

</body>
</html>